package com.zking.dto.common;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

@Data @AllArgsConstructor @NoArgsConstructor
public class PageDto<T> {
    private long pageNum;       // 当前页
    private long pageSize;      // 每页条数
    private long totalPages;    // 总页数
    private long totalRecords;  // 总条数
    private List<T> list;
    
    public static <POJO, DTO> PageDto<DTO> fromPage(Page<POJO> page, Function<POJO, DTO> transform) {
        PageDto<DTO> pageDto = new PageDto<>();
        pageDto.setPageNum(page.getCurrent());
        pageDto.setPageSize(page.getSize());
        pageDto.setTotalPages(page.getPages());
        pageDto.setTotalRecords(page.getTotal());
        pageDto.setList(page
                .getRecords()
                .stream()
                .map(transform)
                .collect(Collectors.toList())
        );
        return pageDto;
    }
    
    public static <U> PageDto<U> fromPage(Page<U> page) {
        PageDto<U> pageDto = new PageDto<>();
        pageDto.setPageNum(page.getCurrent());
        pageDto.setPageSize(page.getSize());
        pageDto.setTotalPages(page.getPages());
        pageDto.setTotalRecords(page.getTotal());
        pageDto.setList(page.getRecords());
        return pageDto;
    }
}
